package ThreadDemo;

public class synchronizedDemo4 {
    public static void main(String[] args) {
        Foo foo = new Foo();
//        Foo foo1 = new Foo();
        Thread t1 = new Thread() {
            public void run() {
                foo.methodA();
            }
        };
        Thread t2 = new Thread() {
            public void run() {
                foo.methodA();
//                foo1.methodA();
            }
        };
        t1.start();
        t2.start();
    }
}

class Foo {

    /*
     * 因为synchronized关键字修饰方法时默认的同步监视器就是this所以这两个方法指向的同步监视器都是this同一个
     * 互斥锁只有在不同的同步代码块执行的同步监视器是同一个类对象时有效
     * */

    public synchronized void methodA() {
        Thread t = Thread.currentThread();
        System.out.println(t.getName() + ":正在执行A方法");
        System.out.println(t.getName() + ":A方法执行结束");
    }

    public void methodB() {
        Thread t = Thread.currentThread();
        System.out.println(t.getName() + ":正在执行B方法");
        System.out.println(t.getName() + ":B方法执行结束");
    }
}
